// 引入第三方包
const gulp = require('gulp')
//css压缩处理
const cssmin = require('gulp-cssmin')
//引用第三方包作用sass文件传成css文件
const sass = require('gulp-sass')(require('sass'))
// js压缩处理
const uglify = require('gulp-uglify')
// es6->es5
const babel = require('gulp-babel')
// html压缩处理
const htmlmin = require('gulp-htmlmin')
// 清除目录
const clean = require('gulp-clean')
// 内置web服务器
const webserver = require('gulp-webserver')
// 打包css文件
gulp.task('css', function () {
    return gulp.src('./src/css/**')
        .pipe(cssmin()) // css压缩处理
        .pipe(gulp.dest('./dist/css/'))
})
// 打包sass文件
gulp.task('sass', function () {
    return gulp.src('./src/sass/**')
        .pipe(sass()) // sass文件流转到css文件流
        .pipe(cssmin()) // css文件压缩处理
        .pipe(gulp.dest('./dist/css/'))
})
// 打包js文件
gulp.task('js', function () {
    return gulp.src('./src/js/**')
        .pipe(babel({
            presets: ['es2015']
        })) // es6->es5
        .pipe(uglify()) // 压缩js
        .pipe(gulp.dest('./dist/js/'))
})
// 打包HTML文件
gulp.task('html', function () {
    return gulp.src('./src/pages/**')
        .pipe(htmlmin({
            removeEmptyAttributes: true, // 移出所有空属性
            collapseWhitespace: true // 压缩html
        }))
        .pipe(gulp.dest('./dist/pages/'))
})
// 压缩lib文件
gulp.task('lib', function () {
    return gulp.src('./src/lib/**')
        .pipe(gulp.dest('./dist/lib/'))
})
// 压缩static文件
gulp.task('static', function () {
    return gulp.src('./src/static/**')
        .pipe(gulp.dest('./dist/static/'))
})
// 清除dist目录
gulp.task('clean', function () {
    return gulp.src('./dist', {
            allowEmpty: true // dist不存在时配置
        })
        .pipe(clean())
})
// 自动打开浏览器
gulp.task('webserver', function () {
    return gulp.src('./dist')
        .pipe(webserver({
            host: 'localhost', // 配置打开浏览器的域名
            port: 3000, // 配置打开浏览器端口号
            livereload: true, // 自动刷新浏览器
            open: './pages/index.html' // 默认打开的文件
        }))
})
// 监听所有文件变化任务
gulp.task('watch', function () {
    gulp.watch('./src/css/**', gulp.parallel('css'))
    gulp.watch('./src/sass/**', gulp.parallel('sass'))
    gulp.watch('./src/js/**', gulp.parallel('js'))
    gulp.watch('./src/pages/**', gulp.parallel('html'))
    gulp.watch('./src/lib/**', gulp.parallel('lib'))
    gulp.watch('./src/static/**', gulp.parallel('static'))
})
// 根目录下可执行运行默认任务，通过 gulp 命令
exports.default = gulp.series('clean', gulp.parallel('css', 'sass', 'js', 'html', 'lib', 'static'), 'webserver', 'watch')